<?php
class UserModel extends AbstractModel{
  protected $tableName = '"user"';

  protected $primaryKey = array('user_id');
  protected $columnTypes = array('user_id'=>'uuid');

  public $data = array(
      'user_id'=>'',
      'supervisor_id'=>NULL,
      'company_id'=>'',
      'status_id'=>1,
      'display_name'=>'',
      'position_name'=>NULL,
      'photo_file'=>NULL,
      'organization_id'=>NULL,
  );


  static public function getByUserID($id){
		$db = DBFacade::getConnection();
		$sql='
			SELECT * FROM "user" WHERE user_id = :user_id
		';
    $dbh = $db->prepare($sql);
		$dbh->execute(array($id));
    $line = $dbh->fetch();
		if (!empty($line)) return new UserModel($line);
		else return false;
	}

    
  /**
   * Метод для проверки, есть ли уже в компании такой пользователь
   * @param <type> $email
   * @param <type> $companyId
   * @return UserModel 
   */
  static public function getByEmailAndCompanyId($email, $companyId){
		$db = DBFacade::getConnection();
		$sql="
			SELECT u.* FROM \"user\" u
      INNER JOIN user_auth ua ON u.user_id = ua.user_id and auth_type='email'
      WHERE ua.key1 = ? and u.company_id = ?
		";
    $dbh = $db->prepare($sql);
		$dbh->execute(array($email, $companyId));
    $line = $dbh->fetch();
		if (!empty($line)) return new UserModel($line);
		else return false;
	}


  /**
   * Юзеру назначается роль по ID роли.
   * НЕ ПРОВЕРЯЕТ, ЕСТЬ ЛИ УЖЕ ТАКАЯ ЗАПИСЬ!!! И не будет.
   * @param <type> $roleId 
   */
  public function setRoleById($roleId){
		$db = DBFacade::getConnection();
		$sql="
      INSERT INTO user_role (user_id, role_id) VALUES (?, ?);
		";
    $dbh = $db->prepare($sql);
		$res = $dbh->execute(array($this->data['user_id'], $roleId));
    if ($res) return true;
    else return false;
  }
    	

  /**
   * Достать всех пользователей в компании
   * @param uuid $id
   * @return array of UserModel
   */
  static public function getByCompanyId($id){
		$db = DBFacade::getConnection();
		$sql='
			SELECT * FROM "user"
      WHERE company_id = ?
      ORDER BY UPPER(display_name)
		';
    $dbh = $db->prepare($sql);
		$dbh->execute(array($id));
    $lines = $dbh->fetchAll();
		$result = array();
    foreach ($lines as $line){
      $result[] = new UserModel($line);
    }
		return $result;
  }


    

}


